home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / PREPALT.BAS < prev    next >
BASIC Source File  |  2000-09-29  |  8KB  |  328 lines

  1. $INCLUDE "REGNAMES.INC"
  2. %PS = 16384
  3. %A1 = %PS + 00
  4. %A2 = %PS + 02
  5. %A3 = %PS + 04
  6. %A4 = %PS + 06
  7. %A5 = %PS + 08
  8. %A6 = %PS + 10
  9.  
  10. %A6Low = %A6+1
  11. stasten$=" ESC = Ende   A bis F = Laufwerk   X = Format   Y = Quick-Format   Z = Kopieren"
  12. DIM sektoren(5),tracks(5),heads(5),fat(5),sekProCluster(5),ready(5)
  13.  
  14. COLOR 3,1
  15. CLS
  16.  
  17. laufwerk=-1
  18.  
  19. CALL Balken(1,1,"ATUtilities Disk Transfer - Medium-Installation")
  20. LOCATE 2,1
  21. PRINT "Copyright (C) 1993 by Thomas Dreibholz - All rights reserved."
  22.  
  23. REG %AX,(1*256)+29
  24. CALL INTERRUPT &H0B
  25. offset=REG(%DI)
  26.  
  27. IF offset<>-1 THEN
  28.  CALL ZeigeLaufwerke
  29.  CALL Tasten
  30. ELSE
  31.  CALL Balken(5,1,"ATUtilities Disk Transfer ist noch nicht aktiv!")
  32.  CALL Balken(6,1,"Laden Sie zuerst das Utility auf dem Amiga und rufen PREP.EXE erneut auf.")
  33.  CALL Balken(12,1," beliebige Taste = Ende")
  34.  BEEP
  35.  WHILE INKEY$="":WEND
  36. END IF
  37.  
  38. COLOR 15,0
  39. CLS
  40. END
  41.  
  42.  
  43. SUB ZeigeLaufwerke SHARED
  44.  DEF SEG = &HD400
  45.  
  46.  LOCATE 4,1
  47.  FOR i=0 TO 5
  48.   POKEI offset+%A1,100
  49.   POKEI offset+%A2,i
  50.   CALL CallAndWait
  51.  
  52.   PRINT CHR$(65+i);"   Laufwerk";i+1;":  ";
  53.   IF PEEKI(offset+%A2)=0 THEN
  54.    POKEI offset+%A1,5
  55.    CALL CallAndWait
  56.  
  57.    DEF SEG = &HD400
  58.    sektoren(i)=PEEKI(offset+%A2)
  59.    tracks(i)=PEEKI(offset+%A3)
  60.    heads(i)=PEEKI(offset+%A4)
  61.    fat(i)=PEEKI(offset+%A5)
  62.    sekProCluster(i)=PEEK(offset+%A6Low)
  63.    CALL XPrint("Sektoren:",sektoren(i),6,5)
  64.    CALL XPrint("Spuren:",tracks(i),6,5)
  65.    CALL XPrint("S/L-K”pfe:",heads(i),4,5)
  66.    ready(i)=1
  67.   ELSE
  68.    ready(i)=0
  69.    PRINT "Nicht verfgbar";
  70.   END IF
  71.   PRINT ""
  72.  NEXT
  73. END SUB
  74.  
  75. SUB Tasten SHARED
  76.  CALL Balken(11,1,stasten$)
  77.  
  78.  ende=1
  79.  WHILE ende=1
  80.   i$=""
  81.   WHILE i$="": i$=INKEY$ : WEND
  82.   IF i$=CHR$(27) THEN ende=0
  83.   i$=UCASE$(i$)
  84.   IF i$>="A" AND i$<="F" THEN
  85.    CALL Bearbeite(ASC(i$)-65)
  86.   ELSEIF i$="X" THEN
  87.    CALL Formatiere(0)
  88.   ELSEIF i$="Y" THEN
  89.    CALL Formatiere(1)
  90.   ELSEIF i$="Z" THEN
  91.    CALL Kopiere
  92.   END IF
  93.  WEND
  94. END SUB
  95.  
  96. SUB XPrint(text$,zahl,stellen,leer) SHARED
  97.  PRINT text$;
  98.  x$=STR$(zahl)
  99.  x$=STRING$(stellen-LEN(x$)," ")+x$
  100.  PRINT x$;
  101.  PRINT SPC(leer)
  102. END SUB
  103.  
  104. SUB CallAndWait SHARED
  105.  REG %AX,(7*256)+29
  106.  CALL INTERRUPT &H0B
  107.  REG %AX,(8*256)+29
  108.  CALL INTERRUPT &H0B
  109. END SUB
  110.  
  111. SUB Kopiere SHARED
  112.  wahl=-1
  113.  IF laufwerk<>-1 THEN
  114.   ltasten$=" ESC = Zurck    A bis F = Ziellaufwerk w„hlen    "
  115.   CALL Balken(11,1,ltasten$)
  116.   l$="Bitte geben Sie das Ziellaufwerk an: "
  117.   CALL Balken(21,1,l$+"_")
  118.   ende2=1
  119.   WHILE ende2=1
  120.    i$=""
  121.    WHILE i$="": i$=INKEY$ : WEND
  122.    IF i$=CHR$(27) THEN ende2=0 : wahl=-1
  123.    IF i$=CHR$(13) AND wahl<>-1 THEN ende2=0
  124.    i$=UCASE$(i$)
  125.    IF i$>="A" AND i$<="F" THEN
  126.     num=ASC(i$)-65
  127.     IF ready(num)=1 AND num<>laufwerk THEN
  128.      CALL Balken(21,1,l$+i$)
  129.      wahl=num
  130.      CALL Balken(11,1,ltasten$+"Eingabetaste = Kopieren")
  131.     ELSE
  132.      SOUND 1500,2
  133.     END IF
  134.    END IF
  135.   WEND
  136.   CALL EntfBalken(21,1)
  137.  END IF
  138.  IF wahl<>-1 THEN
  139.   t$=""
  140.   IF sektoren(laufwerk)<>sektoren(wahl) THEN
  141.    t$="Quelllaufwerk und Ziellaufwerk haben eine unterschiedliche Sektorenanzahl"
  142.   END IF
  143.   IF tracks(laufwerk)<>tracks(wahl) THEN
  144.    t$="Quelllaufwerk und Ziellaufwerk haben eine unterschiedliche Spurenanzahl"
  145.   END IF
  146.   IF heads(laufwerk)<>heads(wahl) THEN
  147.    t$="Quelllaufwerk und Ziellaufwerk haben unterschiedlich viele S/L-K”pfe"
  148.   END IF
  149.   IF t$="" THEN
  150.    CALL SelectDrive(laufwerk)
  151.    FOR i=0 TO tracks(laufwerk)-1
  152.     CALL Balken(21,1,"Kopiere Track"+STR$(i+1)+" von"+STR$(tracks(laufwerk))+".")
  153.     CALL Copy(i,wahl)
  154.     x=PEEKI(offset+%A2)
  155.     IF x<>0 THEN
  156.      IF x=1 THEN t$="Nicht genug Chip-Speicher fr Spur."
  157.      IF x=2 THEN t$="Fehler beim Lesen der Spur. (CMD_READ/Read())."
  158.      IF x=3 THEN t$="Fehler beim Schreiben der Spur (TD_FORMAT/Write())."
  159.      IF x=4 THEN t$="Fehler beim šberprfen der Spur (CMD_READ)."
  160.      BEEP
  161.      CALL Balken(11,1," beliebige Taste = Zurck")
  162.      CALL Balken(21,1,"Fehler beim Kopieren von Spur"+STR$(i+1)+".")
  163.      CALL Balken(22,1,t$)
  164.      WHILE INKEY$="":WEND
  165.      CALL EntfBalken(21,1)
  166.      CALL EntfBalken(22,1)
  167.      GOTO Fertig
  168.     END IF
  169.    NEXT
  170.   ELSE
  171.    BEEP
  172.    CALL Balken(11,1," beliebige Taste = Zurck")
  173.    CALL Balken(21,1,t$)
  174.    WHILE INKEY$="":WEND
  175.   END IF
  176.   CALL EntfBalken(21,1)
  177.  END IF
  178. Fertig:
  179.  CALL Balken(11,1,stasten$)
  180. END SUB
  181.  
  182. SUB Bearbeite(num) SHARED
  183.  LOCATE 13,1
  184.  IF ready(num)=1 THEN
  185.   laufwerk=num
  186.   PRINT "Aktives Laufwerk:";num+1
  187.   fSektoren=sektoren(num)
  188.   fTracks=tracks(num)
  189.   fHeads=heads(num)
  190.   fFATSektoren=fat(num)
  191.   fSekProCluster=sekProCluster(num)
  192.   LOCATE 15,1
  193.   PRINT "Sektoren=        ";fSektoren
  194.   PRINT "Spuren=          ";fTracks
  195.   PRINT "S/L-K”pfe=       ";fHeads
  196.   PRINT "FAT-Sektoren=    ";fFATSektoren
  197.   PRINT "Sektoren/Cluster=";fSekProCluster
  198.  ELSE
  199.   SOUND 1500,2
  200.  END IF
  201. END SUB
  202.  
  203. SUB Balken(z,s,text$) SHARED
  204.  LOCATE z,s
  205.  COLOR 3,6
  206.  PRINT text$+STRING$(80-LEN(text$)," ")
  207.  COLOR 3,1
  208. END SUB
  209.  
  210. SUB EntfBalken(z,s) SHARED
  211.  LOCATE z,s
  212.  PRINT STRING$(80," ")
  213. END SUB
  214.  
  215. SUB Formatiere(quick) SHARED
  216.  IF laufwerk<>-1 THEN
  217.   CALL Balken(11,1," Y = Formatierung starten   N = Zurck")
  218.   CALL Balken(21,1,"Wollen Sie das Medium wirklich Formatieren ?")
  219.   CALL Balken(22,1,"Alle gesicherten Daten werden gel”scht! [Y/N]")
  220.   i$=""
  221.   WHILE i$="" : i$=INKEY$ : WEND
  222.   i$=UCASE$(i$)
  223.   CALL EntfBalken(21,1)
  224.   CALL EntfBalken(22,1)
  225.   IF i$="Y" THEN
  226.    CALL Balken(21,1,"Das Medium wird formatiert. Bitte warten...")
  227.    CALL SelectDrive(laufwerk)
  228.    IF quick=0 THEN
  229.     FOR i=0 TO fTracks-1
  230.      CALL Balken(22,1,"Formatiere Spur"+STR$(i+1)+" von"+STR$(fTracks)+".")
  231.      CALL Format(i)
  232.      x=PEEKI(offset+%A2)
  233.      IF x<>0 THEN
  234.       BEEP
  235.       CALL Balken(11,1," beliebige Taste = Zurck")
  236.       CALL Balken(21,1,"Fehler beim Formatieren von Spur"+STR$(i+1)+".")
  237.       IF x=1 THEN t$="Nicht genug Chip-Speicher fr Spur."
  238.       IF x=2 THEN t$="Fehler beim Formatieren (TD_FORMAT)."
  239.       IF x=3 THEN t$="Fehler beim šberprfen (CMD_READ)."
  240.       CALL Balken(22,1,t$)
  241.       WHILE INKEY$="":WEND
  242.       GOTO Okay
  243.      END IF
  244.     NEXT
  245.    END IF
  246.  
  247.    REM Boot-Sektor schreiben
  248.    POKE offset+&H00,0
  249.    POKE offset+&H01,0
  250.    POKE offset+&H02,0
  251.    i$="-TD- 1.0"
  252.    FOR i=0 TO 7
  253.     POKE offset+&H03+i,ASC(MID$(i$,i+1,1))
  254.    NEXT
  255.    POKEI offset+&H0B,512
  256.    POKE  offset+&H0D,fSekProCluster
  257.    POKEI offset+&H0E,1
  258.    POKE  offset+&H10,1
  259.    POKEI offset+&H11,112
  260.    POKEI offset+&H13,fSektoren
  261.    POKE  offset+&H15,&HF8
  262.    POKEI offset+&H16,fFATSektoren
  263.    POKEI offset+&H18,fSektoren/fTracks/fHeads
  264.    POKEI offset+&H1A,fHeads
  265.    POKEI offset+&H1C,1
  266.    FOR i=&H1E TO &HFF
  267.     POKE offset+i,0
  268.    NEXT
  269.    CALL XWrite(0,1)
  270.  
  271.    REM File Allocation Table schreiben
  272.    FOR i=0 TO fFATSektoren*512
  273.     POKE offset+i,0
  274.    NEXT
  275.    POKE offset+0,&HFB
  276.    POKE offset+1,&HFF
  277.    CALL XWrite(1,fFATSektoren)
  278.  
  279.    REM Hauptverzeichnis
  280.    FOR i=0 TO 2048
  281.     POKE offset+i,0
  282.    NEXT
  283.    n$="EMPTY DISK "+CHR$(8)+CHR$(0)
  284.    FOR i=0 TO 12
  285.     POKE offset+i,ASC(MID$(n$,i+1,1))
  286.    NEXT
  287.    CALL XWrite(fFATSektoren+1,4)
  288.    CALL Update
  289.  
  290.   END IF
  291. Okay:
  292.   CALL Balken(11,1,stasten$)
  293.   CALL EntfBalken(21,1)
  294.   CALL EntfBalken(22,1)
  295.  END IF
  296. END SUB
  297.  
  298. SUB XWrite(sektor,length) SHARED
  299.  POKEI offset+%A1,1
  300.  POKEI offset+%A2,length
  301.  POKEI offset+%A3,sektor
  302.  CALL CallAndWait
  303. END SUB
  304.  
  305. SUB Format(spur) SHARED
  306.  POKEI offset+%A1,10
  307.  POKEI offset+%A2,spur
  308.  CALL CallAndWait
  309. END SUB
  310.  
  311. SUB Copy(spur,ziel) SHARED
  312.  POKEI offset+%A1,20
  313.  POKEI offset+%A2,spur
  314.  POKEI offset+%A3,ziel
  315.  CALL CallAndWait
  316. END SUB
  317.  
  318. SUB Update SHARED
  319.  POKEI offset+%A1,3
  320.  CALL CallAndWait
  321. END SUB
  322.  
  323. SUB SelectDrive(num) SHARED
  324.  POKEI offset+%A1,100
  325.  POKEI offset+%A2,num
  326.  CALL CallAndWait
  327. END SUB
  328.